#ifndef SOCIALWHALE_H
#define SOCIALWHALE_H

#include <QObject>
#include <QDir>
#include <QString>
#include "logic/pluginhandler.h"
#include "logic/thememanager.h"

class User;

/*
 * This class handles initialization and program flow
 * 
 * The member functions are not static so that we can call QObject::connect
 * on them.
 */
class SocialWhale : public QObject {
    Q_OBJECT

    public:
        SocialWhale();
        void init(); // initialization stuff
        QDir whaleDirectory(); // get folder with our files and settings

        void chooseWindow( User * user ); // choose the type of screen to be shown (login, home dashboard, etc)
        void setUpWhaleDirectory( QDir & dir, const QString dirName ); // setup the directory with SocialWhale files.

    public slots:
        void initTheme();
        void initPlugins();

        void showStartWindow(); // the screen you see when starting logged out
        void showLoginWindow(); // the screen you use to login
        void showHomeWindow(); // the screen you see logged in
        void hideActiveWindow(); // help function for the other slots

    private:
        PluginHandler * mPluginHandler;
        ThemeManager * mThemeManager;
};

#endif
